#pragma once
/*
 * This game use those following libraries/engines:
 * Bullet   - Physics Engine
 * Enet     - UDP networking library
 * Ogre3D   - 3d engine (opengl)
 * Gorilla  - 2D graphics interface for Ogre3D
 */

//#define USE_BULLET

//#define USE_PROCEDURAL
//#define USE_YAML

//#include <boost/algorithm/string.hpp>
// Ogre3D & OIS include files
#define LESS_HEADERS // might improve intellisense speed, I don't know.
#ifdef LESS_HEADERS
#include "OgreBillboardChain.h"
#include "OgreBillboardSet.h"
#include "OgreCamera.h"
#include "OgreConfigFile.h"
#include "OgreEntity.h"
#include "OgreException.h"
#include "OgreLight.h"
#include "OgreLogManager.h"
#include "OgreManualObject.h"
#include "OgreMaterial.h"
#include "OgreMaterialManager.h"
#include "OgreMath.h"
#include "OgreMesh.h"
#include "OgreMeshManager.h"
#include "OgreOverlay.h"
#include "OgreOverlayContainer.h"
#include "OgreOverlayElement.h"
#include "OgreOverlayManager.h"
#include "OgreRenderWindow.h"
#include "OgreResourceGroupManager.h"
#include "OgreRoot.h"
#include "OgreSceneManager.h"
#include "OgreSceneNode.h"
#include "OgreString.h"
#include "OgreStringConverter.h"
#include "OgreStringVector.h"
#include "OgreSubEntity.h"
#include "OgreSubMesh.h"
#include "OgreTechnique.h"
#include "OgreViewport.h"

#include "OgreRenderQueueListener.h"

#else
#include <Ogre.h>
#endif

// loading files from apple

#ifdef __APPLE__
#include <macUtils.h>
#include <OIS/OIS.h>
#define CROSSLOAD(s) load(macBundlePath() + "/Contents/Resources/"+s)
#else
#include <OIS.h>
#define CROSSLOAD(s) load(s)
#endif

enum query_flags
{
    qf_effect = 1 << 0,
    qf_movable = 1 << 1,
    qf_static = 1 << 2,
    qf_player = 1 << 3
};

typedef Ogre::Vector3 Vec3;
typedef Ogre::Vector2 Vec2;
using namespace std;
using namespace Ogre;

// custom defines
#include "defines.h"

#include <cmath>
// yaml
#include "yaml-cpp\yaml.h"
typedef YAML::Node ynode;


// procedural geometry library
#include "Procedural.h"


//#include "proced2.h"
#include <OgreTextAreaOverlayElement.h>

// Bullet Physics include files
#include <btBulletDynamicsCommon.h>
#include <btBulletCollisionCommon.h>
#include "BtOgreExtras.h"
#include "BtOgrePG.h"
#include "BtOgreGP.h"

// Gorilla and console
#include "Gorilla.h"
#include "OgreConsoleForGorilla.h"

// dirty, but necessary for this design, might switch to namespace only
struct Application;
extern Application * appli;

// application headers

//#define LASERCAST

#include "functions.h"
//#include "fx_LaserCast.h"

#include "objectpool.h"
#include "game_datastruct.h"
#include "game_itemmgr.h"
#include "bar.h"
#include "missile.h"
#include "game_machine.h"

//#include "text_status.h"
//#include "eff_bullets.h"
#include "Application.h"


